package testes;

import static org.junit.Assert.*;

import org.junit.Test;

import estrategias.*;
import simulacao.Jogador;

public class TesteJogador {

	@Test
	public void testaMissconception() {
		Jogador jogador = new Jogador();
		jogador.setEstrategia(new EstrategiaSempreCooperar());
		jogador.adicionaJogadaAdversario(0);
		jogador.setpSeEnganar(0.0);
		assertTrue(jogador.getJogada()==0);
		jogador.setpSeEnganar(1.0);
		assertTrue(jogador.getJogada()==1);
		
		jogador.setEstrategia(new EstrategiaSempreObstar());
		jogador.setpSeEnganar(0.0);
		assertTrue(jogador.getJogada()==1);
		jogador.setpSeEnganar(1.0);
		assertTrue(jogador.getJogada()==0);
	}
	
	@Test
	public void testaMissconception2() {
		int total = 1000000;
		int[] estrategia = {0, 0};
		double c = 0.25;
		Jogador jogador = new Jogador();
		jogador.setEstrategia(new EstrategiaAleatoria(c));
		jogador.setpSeEnganar(1.0);
		for (int i = 0; i < total; i++) {
			estrategia[jogador.getJogada()]++;
		}
		assertTrue(((double)estrategia[1]/total)>(c-0.01) && ((double)estrategia[1]/total)<(c+0.01));
		assertTrue(((double)estrategia[0]/total)>(1.0-c-0.01) && ((double)estrategia[0]/total)<(1.0-c+0.01));
		
		estrategia[0] = estrategia[1] = 0;
		jogador.setEstrategia(new EstrategiaAleatoria(1-c));
		jogador.setpSeEnganar(1.0);
		for (int i = 0; i < total; i++) {
			estrategia[jogador.getJogada()]++;
		}
		assertTrue(((double)estrategia[0]/total)>(c-0.01) && ((double)estrategia[0]/total)<(c+0.01));
		assertTrue(((double)estrategia[1]/total)>(1.0-c-0.01) && ((double)estrategia[1]/total)<(1.0-c+0.01));
		

	}

}
